Profilo Ravenscar
Vai alla navigazione
Vai alla ricerca
Il profilo Ravenscar (Ravenscar profile) è un sottoinsieme delle funzionalità del linguaggio Ada progettato per sistemi critici, che fornisce garanzie hard real-time per i programmi implementati conformemente ad esso. Fu definito in un rapporto tecnico seguente la definizione dello standard Ada 95, e divenne parte dello standard Ada 2012. Prende il nome dal villaggio inglese di Ravenscar, sede dell'ottavo International Real-Time Ada Workshop (IRTAW 8).[1]
Caratteristiche
[modifica | modifica wikitesto]Un'applicazione conforme al profilo Ravenscar impiega la direttiva
pragma Profile (Ravenscar);
che è equivalente al seguente insieme di direttive:[1]
pragma Task_Dispatching_Policy (FIFO_Within_Priorities); -- Scheduler FIFO con preemption basata su priorità
pragma Locking_Policy (Ceiling_Locking); -- Usa il protocollo priority ceiling, per prevenire l'inversione delle priorità
pragma Detect_Blocking; -- Garantisce che un'operazione potenzialmente bloccante sia rilevata e generi un'eccezione
pragma Restrictions (
No_Abort_Statements, -- Proibisce l'uso del costrutto `abort`
No_Dynamic_Attachment, -- Proibisce l'uso del package Ada.Interrupts
No_Dynamic_Priorities, -- Proibisce lettura e scrittura di priorità a runtime (package Ada.Priorities e attributo Priority)
No_Implicit_Heap_Allocations, -- Proibisce l'uso di costrutti che allocano memoria sullo heap implicitamente
No_Local_Protected_Objects, -- Oggetti protetti possono essere dichiarati solo a livello di libreria
No_Local_Timing_Events, -- Oggetti di tipo Ada.Real_Time.Timing_Events possono essere dichiarati solo a livello di libreria
No_Protected_Type_Allocators, -- Proibisce l'uso di allocatori di oggetti di tipo protetto o contenenti membri di tipo protetto
No_Relative_Delay, -- Proibisce l'uso del costrutto `delay` in forma relativa (e.g. `delay X;`)
No_Requeue_Statements, -- Proibisce l'uso del costrutto `requeue`
No_Select_Statements, -- Proibisce l'uso del costrutto `select`
No_Specific_Termination_Handlers, -- Proibisce l'uso di Task_Termination.Set_Specific_Handler e di Task_Termination.Specific_Handler
No_Task_Allocators, -- Proibisce la generazione di allocatori per oggetti di tipo task o che hanno membri di tipo task
No_Task_Hierarchy, -- Tutti i task discendono direttamente dall'environment task
No_Task_Termination, -- Tutti i task devono continuare la propria esecuzione indefinitamente e non possono terminare
Simple_Barriers, -- La guardia dell'`entry` in un oggetto protetto deve essere un valore statico o un membro dell'oggetto
Max_Entry_Queue_Length => 1, -- Non consente di avere contemporaneamente più di una chiamata nella coda di un `entry`
Max_Protected_Entries => 1, -- Un tipo protetto non può avere più di un `entry`
Max_Task_Entries => 0, -- Un task non può avere alcun `entry`
-- Proibisce l'uso dei seguenti package
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Calendar,
No_Dependence => Ada.Execution_Time.Group_Budget,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Task_Attributes);
Note
[modifica | modifica wikitesto]- ^ a b John Barnes, The Ravenscar profile, su adaic.org.
Bibliografia
[modifica | modifica wikitesto]- Alan Burns, The Ravenscar Profile (PDF), in ACM SIGAda Ada Letters, XIX, n. 4, December 1999, pp. 49–52, DOI:10.1145/340396.340450. URL consultato il 19 settembre 2019 (archiviato dall'url originale il 29 febbraio 2012).
- Alan Burns, Brian Dobbing and Tullio Vardanega, Guide for the use of the Ada Ravenscar Profile in high integrity systems (PDF), in ACM SIGAda Ada Letters, XXIV, n. 2, June 2004, pp. 1–74, DOI:10.1145/997119.997120.
- Ravenscar profile for high-integrity systems, AI95-00249, ISO/WG9 Ada Rapporteur Group.